import axios from 'axios';

// PlantUML API 基础URL
const BASE_URL = 'http://192.168.77.14:8080';

/**
 * 根据PlantUML代码生成UML图表图片
 * @param {string} plantUMLCode - 用于生成图表的PlantUML代码
 * @returns {Promise<Blob>} - 包含生成图片的Blob对象
 */
export const generateUMLImage = async (plantUMLCode) => {
  try {
    const response = await axios({
      url: `${BASE_URL}/diagrams/image`,
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: {
        umlCode: plantUMLCode
      },
      responseType: 'blob' // 指定响应类型为blob
    });
    
    return response.data;
  } catch (err) {
    console.error('生成UML图表时出错:', err);
    throw new Error('无法生成UML图表，请检查配置或服务连接');
  }
};

/**
 * 保存UML图表到服务器
 * @param {Object} saveData - 要保存的图表数据
 * @param {string} saveData.bizId - 图表的业务ID
 * @param {string} saveData.description - 图表描述
 * @param {string} saveData.id - 图表ID（新建图表时为空）
 * @param {string} saveData.title - 图表标题
 * @param {string} saveData.type - 图表类型（class, activity等）
 * @param {string} saveData.umlCode - 图表的PlantUML代码
 * @param {string} saveData.umlJson - 图表状态的JSON表示
 * @returns {Promise<Object>} - 服务器响应数据
 */
export const saveDiagram = async (saveData) => {
  try {
    const response = await axios.post(`${BASE_URL}/diagrams/save`, saveData);
    return response.data;
  } catch (error) {
    console.error('保存图表时出错:', error);
    throw new Error('保存图表失败');
  }
};

/**
 * 从服务器删除图片
 * @param {string|Array<string>} imageId - 要删除的图片ID或ID数组
 * @returns {Promise<Object>} - 服务器响应数据
 */
export const removeImages = async (imageId) => {
  try {
    const data = Array.isArray(imageId) ? imageId : [imageId];
    const response = await axios.post(`${BASE_URL}/diagrams/removeBatch`, data);
    return response.data;
  } catch (error) {
    console.error('删除图片时出错:', error);
    throw new Error('删除图片失败');
  }
};

/**
 * 根据业务ID获取目录对应的图表数据
 * @param {string|number} bizId - 业务ID
 * @returns {Promise<Object>} - 服务器响应数据
 */
export const getDiagramByBizId = async (bizId) => {
  try {
    const response = await axios.get(`${BASE_URL}/diagrams/biz/${bizId}`);
    return response.data;
  } catch (error) {
    console.error('获取目录数据失败:', error);
    throw new Error('获取目录数据失败');
  }
};

/**
 * 保存HTML文档到服务器
 * @param {Object} saveData - 要保存的HTML文档数据
 * @param {string} saveData.id - 文档ID
 * @param {string} saveData.content - HTML内容
 * @returns {Promise<Object>} - 服务器响应数据
 */
export const saveHtmlDocument = async (saveData) => {
  try {
    const response = await axios.post(`${BASE_URL}/diagrams/saveHtmlDocument`, saveData);
    return response.data;
  } catch (error) {
    console.error('保存HTML文档时出错:', error);
    throw new Error('保存HTML文档失败');
  }
};
